6
תגובות

ביטוי רגולרי לסוגריים

פתח nocksh ,
ניסיתי לכתוב ביטוי רגולרי שמחפש מילה שבסופה יכולים להיות סוגריים, אבל הם לא חובה.
כלומר, גם "abc" וגם "abc()" יהיו תקינים.
משום מה לא הצלחתי. אשמח לעזרה.

6 תשובות

avatar ענה intval ב 03 לאוקטובר 2012 #

$t ='abc abc() xyz xyz() 123';
preg_match_all("#(\b\w+\b(?:\(\))?)#usUim", $t, $matches);
print_r($matches);

avatar ענה nocksh ב 03 לאוקטובר 2012 #

אפשר הסבר לגבי החלק הזה:
(?:\(\))?
תודה.

avatar ענה intval ב 04 לאוקטובר 2012 #




סוגריים אומרות למנוע הביטויים הרגולריים לשמור לתוך משתנה את מה שנמצא בתוכם בשביל שימוש חוזר.
אני רוצה להשתמש בסוגריים בשביל לסמן "אוסף" או "רצף" שכולו ביחד יכול להופיע אחד או אפס פעמים.

בשביל לסמן את הרצף - השתמש בסוגריים, אבל בגלל שמנוע הביטויים הרגולריים ינסה לזכור את התוכן שלהם,
אבל לי אין צורך בתוכן הזה, השתמשתי באופרטור ?: שפשוט אומר למנוע לא לזכור את מה שבתוך הסוגריים.

אתה יכול לנסות להוריד את ?: והכל יעבוד, אבל התוצאה שתקבל ב preg_match_all תהיה שונה, בגלל שהפעם תקבל בתוך ערך נפרד גם את מה שהמנוע זכר מתוך הסוגריים הפנימיות.

avatar ענה nocksh ב 05 לאוקטובר 2012 #

בגלל זה לא הצלחתי, כי לא הכרתי את ?:
תודה!

ד"א מאיפה התמונה? (או שציירת בעצמך?)

avatar ענה intval ב 05 לאוקטובר 2012 #

ציירתי ב word
וזה לא הסיבה שלא הצחלת. אתה יכול להוריד את האופרטור הזה ועדיין הכל יעבוד

avatar ענה ldbrgr ב 07 לאוקטובר 2012 #

פעם הבאה תנסה לדבג עם RegExr לפני, זה יחסוך לך זמן לחכות לתשובה.